<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Promise的基本使用</title>
</head>
<body>
	<!-- 
		1. 两个重要语法
						new Promise(executor)
						Promise.prototype.then(成功的回调，失败的回调)

		2. 基本编码流程
					1.创建Promise的实例对象(pending状态), 传入executor函数
					2.在executor中执行异步任务（定时器、ajax请求）
					3.根据异步任务的结果，做不同处理：
								3.1 如果异步任务成功了：
												我们调用resolve(value), 让Promise实例对象状态变为成功(fulfilled),并指定成功的value
								3.2 如果异步任务失败了：
												我们调用reject(reason), 让Promise实例对象状态变为失败(rejected),并指定失败的reason
					4.通过then方法为Promise的实例指定：成功、失败的回调函数，同时可以获取成功的value、失败的reason
					注意：then方法所指定的：成功的回调、失败的回调，都是【异步的回调】。

		3. 关于状态的注意点：
					1.三个状态:
								pending: 未确定的------初始状态
								fulfilled: 成功的------调用resolve()后的状态
								rejected: 失败的-------调用reject()后的状态
					2.两种改变：
								pending ==> fulfilled
								pending ==> rejected
	 -->

	 <script type="text/javascript" >
	 		const p = new Promise((resolve,reject)=>{
				console.log(1)
				//用定时器模拟一个异步任务
				setTimeout(() => {
					reject('hello')
				},1000);

				//ajax请求
				/* const xhr = new XMLHttpRequest()
				xhr.onreadystatechange = ()=>{
					if(xhr.readyState === 4 ){
						if(xhr.status >= 200 && xhr.status <= 299) resolve(xhr.response)
						else reject(xhr.response)
					}
				}
				xhr.responseType = 'json'
				xhr.open('GET','https://api.apiopen.top/getJoke0111')
				xhr.send() */
			})

			p.then(
				(value)=>{console.log('异步请求成功了',value)},
				(reason)=>{console.log('异步请求失败了',reason)},
			)

			console.log(900)

	 </script>
</body>
</html>